builder-tool: Rewrite GtkDialog
authorLubomir Rintel <lkundrak@v3.sk>
Thu, 30 May 2019 07:44:44 +0000 (09:44 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 31 May 2019 17:03:12 +0000 (17:03 +0000)
Changes

  <object class="GtkDialog">
    <child internal-child="vbox">
      <...>
        <child internal-child="action_area">...</child>
        ...
      </...>
      <packing />
    </child>
  <object>

to

  <object class="GtkDialog">
    <child internal-child="content_area">
      <...>
        ...
      </...>
    </child>
    <child internal-child="action_area">...</child>
  <object>

gtk/tools/gtk-builder-tool-simplify.c

index eed27b29b5a639692ee6e31d9becba4077c39865..a7f7ecbcbba2cde363fe330293581bf1f76b3cb7 100644 (file)
@@ -1265,6 +1265,66 @@ rewrite_paned (Element *element,
     rewrite_paned_child (element, data, child2, "child2");
 }
 
+static void
+rewrite_dialog (Element *element,
+               MyParserData *data)
+{
+  Element *content_area = NULL;
+  Element *vbox = NULL;
+  Element *action_area = NULL;
+  GList *l;
+
+  for (l = element->children; l; l = l->next)
+    {
+      Element *elt = l->data;
+
+      if (g_str_equal (elt->element_name, "child") &&
+          g_strcmp0 (get_attribute_value (elt, "internal-child"), "vbox") == 0)
+        {
+          content_area = elt;
+          break;
+        }
+    }
+
+  if (!content_area || !content_area->children)
+    return;
+
+  vbox = content_area->children->data;
+
+  for (l = vbox->children; l; l = l->next)
+    {
+      Element *elt = l->data;
+
+      if (g_str_equal (elt->element_name, "child") &&
+          g_strcmp0 (get_attribute_value (elt, "internal-child"), "action_area") == 0)
+        {
+          action_area = elt;
+          break;
+        }
+    }
+
+  if (!action_area)
+    return;
+
+  set_attribute_value (content_area, "internal-child", "content_area");
+  vbox->children = g_list_remove (vbox->children, action_area);
+  action_area->parent = element;
+  element->children = g_list_append (element->children, action_area);
+
+  for (l = action_area->children; l; l = l->next)
+    {
+      Element *elt = l->data;
+
+      if (g_str_equal (elt->element_name, "packing"))
+        {
+          action_area->children = g_list_remove (action_area->children, elt);
+          free_element (elt);
+          break;
+        }
+    }
+
+}
+
 static void
 rewrite_layout_props (Element *element,
                       MyParserData *data)
@@ -1487,6 +1547,10 @@ rewrite_element (Element      *element,
       g_str_equal (get_class_name (element), "GtkPaned"))
     rewrite_paned (element, data);
 
+  if (element_is_object_or_template (element) &&
+      g_str_equal (get_class_name (element), "GtkDialog"))
+    rewrite_dialog (element, data);
+
   if (element_is_object_or_template (element) &&
       g_str_equal (get_class_name (element), "GtkOverlay"))
     rewrite_layout_props (element, data);